/**
 ******************************************************************************
 * @file           : bsp_ds18b20.h
 * @brief          : DS18B20 Temperature Sensor Driver (STM32H7xx)
 ******************************************************************************
 * @attention
 *
 * DS18B20温度传感器驱动头文件
 * 单总线通信协议
 *
 ******************************************************************************
 */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BSP_DS18B20_H
#define __BSP_DS18B20_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include <stdint.h>

/* Exported types ------------------------------------------------------------*/
/**
 * @brief DS18B20错误码枚举
 */
typedef enum
{
    DS18B20_OK = 0,             /*!< 成功 */
    DS18B20_ERROR_PARAM,        /*!< 参数错误 */
    DS18B20_ERROR_TIMEOUT,      /*!< 超时 */
    DS18B20_ERROR_CRC,          /*!< CRC校验错误 */
    DS18B20_ERROR_NOT_INIT      /*!< 未初始化 */
} DS18B20_Error_e;

/**
 * @brief DS18B20分辨率枚举
 */
typedef enum
{
    DS18B20_RES_9BIT = 0,       /*!< 9位分辨率（0.5°C） */
    DS18B20_RES_10BIT = 1,      /*!< 10位分辨率（0.25°C） */
    DS18B20_RES_11BIT = 2,      /*!< 11位分辨率（0.125°C） */
    DS18B20_RES_12BIT = 3       /*!< 12位分辨率（0.0625°C） */
} DS18B20_Resolution_e;

/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported variables --------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/

/**
 * @brief       DS18B20初始化
 *
 * @param       无
 *
 * @retval      DS18B20_Error_e - 错误码
 *
 * @note        初始化GPIO和定时器
 */
DS18B20_Error_e ds18b20_init(void);

/**
 * @brief       DS18B20反初始化
 *
 * @param       无
 *
 * @retval      无
 *
 * @note        关闭GPIO和定时器
 */
void ds18b20_deinit(void);

/**
 * @brief       读取DS18B20温度
 *
 * @param[out]  temperature - 温度指针
 *
 * @retval      DS18B20_Error_e - 错误码
 *
 * @note        温度范围：-55~125°C
 */
DS18B20_Error_e ds18b20_read_temperature(float *temperature);

/**
 * @brief       设置DS18B20分辨率
 *
 * @param[in]   resolution - 分辨率
 *
 * @retval      DS18B20_Error_e - 错误码
 *
 * @note        分辨率越高，转换时间越长
 */
DS18B20_Error_e ds18b20_set_resolution(DS18B20_Resolution_e resolution);

/**
 * @brief       获取DS18B20分辨率
 *
 * @param[out]  resolution - 分辨率指针
 *
 * @retval      DS18B20_Error_e - 错误码
 *
 * @note        无
 */
DS18B20_Error_e ds18b20_get_resolution(DS18B20_Resolution_e *resolution);

/**
 * @brief       打印DS18B20状态
 *
 * @param       无
 *
 * @retval      无
 *
 * @note        用于调试
 */
void ds18b20_print_status(void);

#ifdef __cplusplus
}
#endif

#endif /* __BSP_DS18B20_H */
